package com.zenithmind.article.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.zenithmind.article.pojo.domain.Article;
import com.zenithmind.article.pojo.dto.ArticleTagDTO;
import com.zenithmind.article.pojo.query.ArticleQuery;
import com.zenithmind.article.pojo.vo.ArticleVO;
import com.zenithmind.article.pojo.vo.AuthorVO;
import com.zenithmind.common.result.PageResult;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

public interface ArticleService extends IService<Article> {

    String uploadCover(MultipartFile file);

    Article addOrUpdateArticle(Article article);

    PageResult<ArticleVO> pageArticle(ArticleQuery articleQuery);

    ArticleVO bindTags(ArticleTagDTO articleTagDTO);

    ArticleVO getArticleById(String id);

    ArticleVO addCategory(String articleId, String categoryId);
    
    List<ArticleVO> getHotArticles();
    
    /**
     * 获取博客页面热门文章
     * @param limit 返回数量限制
     * @return 热门文章列表
     */
    List<ArticleVO> getBlogHotArticles(Integer limit);
    
    /**
     * 获取活跃作者
     * @param limit 返回数量限制
     * @return 活跃作者列表
     */
    List<AuthorVO> getActiveAuthors(Integer limit);
    
    List<ArticleVO> getArticleArchives();
    
    List<ArticleVO> getRelatedArticles(String articleId);

    Long getArticleCountByUserId();

    Long countView();

    /**
     * 发布文章
     *
     * @param id 文章ID
     * @return 是否成功
     */
    Boolean publishArticle(String id);

    /**
     * 下架文章
     *
     * @param id 文章ID
     * @return 是否成功
     */
    Boolean unpublishArticle(String id);

    /**
     * 更新文章状态
     *
     * @param id 文章ID
     * @param status 状态
     * @return 是否成功
     */
    Boolean updateArticleStatus(String id, String status);
}
